﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace simularBarcos
{
    class Program
    {
        static void Main(string[] args)
        {//variables
            int n = 0;
            int id = 1;
            int n_cont = 0;
            int espacio = 0;
            int be = 0;

            //inicio solicitud de datos
            Puerto prt = new Puerto();
            Console.WriteLine("cantidad de espacios : ");
            prt.espacio = Convert.ToInt32(Console.ReadLine());
            espacio = prt.espacio;//saber cuantos hay
            Console.WriteLine("cantidad de barcos : ");
            n = Convert.ToInt32(Console.ReadLine());

            List<int> e_puerto = new List<int>();//lista con espacios
            while (e_puerto.Count <= prt.espacio)//creacion de espacios
            {
                e_puerto.Add(1);
            }

            List<Barco> rbar = new List<Barco>();
            Queue<Barco> cola = new Queue<Barco>();

            while (id <= n)
            {
                Barco barco = new Barco();
                barco.idb = id;

                Console.WriteLine("conteiners barco {0} :", id);
                n_cont = Convert.ToInt32(Console.ReadLine());

                barco.Cargar(n_cont);
                cola.Enqueue(barco);
                id++;
            }
            //fin solicitud de datos
            do
            {
                var bar = cola.Dequeue();
                for (int i = be; i < prt.espacio; i++)
                {
                    int m = e_puerto[i];
                    
                    if(e_puerto[i]<m)
                    {
                        
                        m=e_puerto[i];
                        e_puerto[i] = e_puerto[i] + 1;
                    }
                    bar.llegada = e_puerto[i];
                    e_puerto[i] = e_puerto[i] + 1;
                    
                    while (bar.cr > 0)
                    {
                        bar.Descargar();
                        //m++;
                        e_puerto[i] = e_puerto[i] + 1;
                        
                        m = e_puerto[i];
                        
                        
                    }
                    
                    bar.salida = e_puerto[i];
                    e_puerto[i] = e_puerto[i] + 1;

                    if (prt.espacio > cola.Count)
                    {
                        be++;
                        break;
                    }
                    else
                    {
                        i++;
                    }

                    
                        
                        
                    }
                if (bar.cr == 0)
                {
                    rbar.Add(bar);
                }
            }

            while (cola.Count > 0);//fin do while



            Console.WriteLine("-----registro de la lista-----------");
            int a = 1;
            foreach (Barco rb in rbar)
            {

                Console.WriteLine("datos barco {0}", a);
                Console.WriteLine("id Barco : {0}", rb.idb);
                Console.WriteLine("t llegada : {0}", rb.llegada);
                Console.WriteLine("t salida : {0}", rb.salida);
                Console.WriteLine("");
                a++;
            }

            Console.ReadLine();



        }
    }
}

